package version2024.medium;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

/**
 * @author sunhl
 * @Description: HJ26 字符串排序
 * @Date: created in 2024/12/28 星期六 16:59
 * @Modified By:
 */
public class HJ26_StringSort {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            String result = sort(str);
            System.out.println(result);
        }
    }

    public static String sort(String str) {
        // 先收集英文字母
        List<Character> letters = new ArrayList<>();
        for (char ch : str.toCharArray()) {
            if (Character.isLetter(ch)) {
                letters.add(ch);
            }
        }

        // 对英文字母做递增排序, 都转换为小写字母, 从前到后排序,
        // 如果存在大小写, 转换后相减为0, 则不排序, 保证按输入顺序的排序(利用了sort方法的稳定性)
        letters.sort(new Comparator<Character>() {
            public int compare(Character o1, Character o2) {
                return Character.toLowerCase(o1) - Character.toLowerCase(o2);
            }
        });

        // 生成结果字符串
        StringBuilder result = new StringBuilder();
        for (int i = 0, j = 0; i < str.length(); i++) {
            if (Character.isLetter(str.charAt(i))) {
                // 是字符的, 按排序以后的顺序加
                result.append(letters.get(j));
                j++;
            } else {
                // 非英文字符的则直接添加
                result.append(str.charAt(i));
            }
        }


        return result.toString();
    }
}
